{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Project"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this project you are asked to create a sequence type that will return a series of (regular convex) Polygon objects.\n",
    "\n",
    "Each polygon will be uniquely defined by:\n",
    "* it is a regular convex polygon:\n",
    "    * edges (sides) are all of equal length\n",
    "    * angles between edges are all equal\n",
    "* the center of the polygon is `(0,0)`\n",
    "* the number of vertices (minimum `3`)\n",
    "* the distance from the center to any vertex should be `R` unit (this is sometimes described as the polygon having a *circumradius* of `R`)\n",
    "\n",
    "The sequence should be finite - so creating an instance of this sequence will require the passing in the number of polygons in the sequence to the initializer.\n",
    "\n",
    "The Polygon objects should be immutable, as should the sequence itself."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In addition, each Polygon should have the following properties:\n",
    "* number of vertices\n",
    "* number of edges (sides)\n",
    "* the edge length\n",
    "* the apothem (distance from center to mid-point of any edge)\n",
    "* surface area\n",
    "* perimeter\n",
    "* interior angle (angle between each edge) - in degrees\n",
    "* supports equality based on # edges and circumradius\n",
    "* supports ordering based on number of edges only"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The sequence object should also have the following properties:\n",
    "\n",
    "* should support fully-featured slicing and indexing (positive indices, negative indices, slicing, and extended slicing)\n",
    "* should support the `length()` function\n",
    "* should provide the polygon with the highest `area:perimeter` ratio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You will need to do a little bit of math for this project. The necessary formulas are included in the video."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Goal 1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a Polygon class with the properties defined above. The initializer for the class will need the number of vertices (or edges, same), and the circumradius (`R`).\n",
    "\n",
    "Make sure you test all your methods and properties. (This is called unit testing)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Goal 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Create a finite sequence type that is a sequence of Polygons start with `3` vertices, up to, and including some maximum value `m` which will need to be passed to the initializer of the sequence type.\n",
    "\n",
    "The value for the circumradius `R`, will also need to be provided to the initializer.\n",
    "\n",
    "Again make sure you test your code!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
